
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;

/**
 *
 * @author enrico
 */
public class AnagraficaView extends BorderPane {

  private BorderPane bp1 = new BorderPane();
  private BorderPane bp2 = new BorderPane();
  private TableView<AnagraficaModel> elencoAnagrafica = new TableView<AnagraficaModel>();
  private AnagraficaController controller;
  private final TextField indirizzoPrimoField = new TextField();
  private final TextField indirizzoSecondoField = new TextField();
  private final TextField telefonoField = new TextField();
  private final TextField cellulareField = new TextField();
  private final TextField noteField = new TextField();
  private final TextField emailField = new TextField();
  private Text nomeCognome = new Text();
  private int idUtente=0;
  private Button rimuoviButton;
  
  public AnagraficaView(AnagraficaController ac) {

    controller = ac;
    // Elenco utenti this
    TableColumn codice = new TableColumn("Cod");
    codice.setCellValueFactory(new PropertyValueFactory<AnagraficaModel, String>("ID"));
    codice.setPrefWidth(50);
    TableColumn nome = new TableColumn("Nome");
    nome.setCellValueFactory(new PropertyValueFactory<AnagraficaModel, String>("nome"));
    nome.setPrefWidth(100);
    TableColumn cognome = new TableColumn("Cognome");
    cognome.setCellValueFactory(new PropertyValueFactory<AnagraficaModel, String>("cognome"));
    cognome.setPrefWidth(100);
    elencoAnagrafica.getColumns().addAll(codice, nome, cognome);
    Button nuovoUtenteButton = new Button("Aggiungi nuovo utente");
    nuovoUtenteButton.setId("green");
    nuovoUtenteButton.setOnAction(new EventHandler<ActionEvent>() {
      
      @Override
      public void handle(ActionEvent arg0) {
        controller.showPopup();
      }
    
    });
    
    setEditingListeners(indirizzoPrimoField,"indirizzo");
    setEditingListeners(indirizzoSecondoField,"indirizzo2");
    setEditingListeners(telefonoField,"telefono");
    setEditingListeners(cellulareField,"cellulare");
    setEditingListeners(emailField,"email");
    setEditingListeners(noteField,"note");

    bp1.setCenter(elencoAnagrafica);
    //bp1.setBottom(nuovoUtenteButton);
    //bp1.setMargin(nuovoUtenteButton, new Insets(8));
    this.setLeft(bp1);

    // bp2 top gridpane
    GridPane dettagli = new GridPane();
    ImageView personcina = new ImageView(new Image(getClass().getResourceAsStream("Stili/User.png")));
    nomeCognome.setId("nomeCognome");
    Text indirizzo = new Text("Indirizzo");
    Text telefono = new Text("Telefono");
    Text cellulare = new Text("Cellulare");
    Text email = new Text("Email");
    Text note = new Text("Note");

    dettagli.add(personcina, 0, 0, 2, 1);
    dettagli.add(nomeCognome, 2,0);
    dettagli.add(indirizzo, 0, 2);
    dettagli.add(indirizzoPrimoField, 1, 2, 2, 1);
    dettagli.add(indirizzoSecondoField, 1, 3, 2, 1);
    dettagli.add(telefono, 0, 4);
    dettagli.add(telefonoField, 1, 4, 2, 1);
    dettagli.add(cellulare, 0, 5);
    dettagli.add(cellulareField, 1, 5, 2, 1);
    dettagli.add(email, 0, 6);
    dettagli.add(emailField, 1, 6, 2, 1);
    dettagli.add(note, 0, 7);
    dettagli.add(noteField, 1, 7, 2, 1);
    
    rimuoviButton = new Button("Elimina utente");
    rimuoviButton.setId("round-red");
    rimuoviButton.setDisable(true);
    
    rimuoviButton.setOnAction(new EventHandler<ActionEvent>() {

      @Override
      public void handle(ActionEvent arg0) {
        controller.eliminaUtente(idUtente);
      }
    });
    
    dettagli.add(rimuoviButton, 0, 8, 3, 1);
    dettagli.setHgap(10);
    dettagli.setVgap(10);
    dettagli.setId("grigliaUtente");
    
    bp2.setCenter(dettagli);
    bp2.setPadding(new Insets(30));
    
    BorderPane bp3 = new BorderPane();
    bp3.setRight(nuovoUtenteButton);
    bp2.setTop(bp3);
    bp2.setMargin(nuovoUtenteButton, new Insets(0,8,8,8));

    this.setCenter(bp2);
  }

  public TableView getTableAnagrafica() {
    return elencoAnagrafica;
  }

  void setUtenteData(String iD, String nome, String cognome, String indirizzo, String indirizzo2, String telefono, String cellulare, String email, String note) {
    idUtente = Integer.valueOf(iD);
    String nomeECognome = nome+" "+cognome;
    nomeCognome.setText(nomeECognome);
    
    indirizzoPrimoField.setText(indirizzo);
    indirizzoSecondoField.setText(indirizzo2);
    telefonoField.setText(telefono);
    cellulareField.setText(cellulare);
    emailField.setText(email);
    noteField.setText(note);
    
    rimuoviButton.setDisable(false);
  }
  
  private void setEditingListeners(final TextField tf, final String nomeCampo) {
    tf.setOnKeyReleased(new EventHandler<KeyEvent>() {
      
      @Override
      public void handle(KeyEvent key) {
        controller.cambiaCampoUtente(tf.getText(),idUtente,nomeCampo);
      }
    });
  }
}
